/*题目4：写几个函数：
（1）输入10个职工的姓名和职工号；
（2）按职工号由小到大顺序排序，姓名顺序也随之调整；
（3）要求输入一个职工号，用折半查找法找出该职工的姓名，从主函数输入要查找的职工号，输出该职工姓名。
*/
#include <stdio.h>
#include <string.h>
void sort(char name[][20], int num[], int n);
int search(int num[], int n, int x);
int main()
{
    char name[10][20];
    int num[10], i, x, j;
    printf("请输入10个职工的姓名和职工号：\n");
    for (i = 0; i < 10; i++)
        scanf("%s%d", name[i], &num[i]);
    sort(name, num, 10);
    printf("请输入要查找的职工号：");
    scanf("%d", &x);
    j = search(num, 10, x);
    if (j == -1)
        printf("没有找到该职工\n");
    else
        printf("该职工的姓名是：%s\n", name[j]);
    return 0;
}
void sort(char name[][20], int num[], int n)
{
    int i, j, t;
    char temp[20];
    for (i = 0; i < n - 1; i++)
        for (j = 0; j < n - 1 - i; j++)
            if (num[j] > num[j + 1])
            {
                t = num[j];
                num[j] = num[j + 1];
                num[j + 1] = t;
                strcpy(temp, name[j]);
                strcpy(name[j], name[j + 1]);
                strcpy(name[j + 1], temp);
            }
}
int search(int num[], int n, int x)
{
    int low = 0, high = n - 1, mid;
    while (low <= high)
    {
        mid = (low + high) / 2;
        if (num[mid] == x)
            return mid;
        else if (num[mid] > x)
            high = mid - 1;
        else
            low = mid + 1;
    }
    return -1;
}
